package top.chukongxiang.project.base.controller.sys;

import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import top.chukongxiang.project.base.model.entity.sys.Role;
import top.chukongxiang.project.base.model.response.R;
import top.chukongxiang.project.base.model.response.RCode;
import top.chukongxiang.project.base.service.sys.RoleService;

import java.util.List;

/**
 * 角色相关
 * @author 楚孔响
 * @version 1.0
 * @date 2022/2/21 16:46
 */
@RestController
@RequestMapping("role")
@AllArgsConstructor
public class RoleController {

    private final RoleService roleService;

    /**
     * 获取所有角色的列表
     * @return 角色列表
     */
    @GetMapping("list")
    public R<List<Role>> list() {
        return R.ok(roleService.list());
    }

    /**
     * 保存或更新角色信息
     * @param role 角色信息
     * @return 保存的信息
     */
    @PutMapping
    public R<Role> saveOrUpdate(@RequestBody Role role) {
        boolean success = roleService.saveOrUpdate(role);
        return success ? R.ok(role) : R.failed(RCode.REMOVED);
    }

    /**
     * 根据id删除角色
     * @param id 角色id
     * @return 被删除角色的id
     */
    @DeleteMapping("{id}")
    public R<Long> removeById(@PathVariable Long id) {
        boolean success = roleService.removeById(id);
        return success ? R.ok(id) : R.failed(RCode.REMOVED);
    }

    /**
     * 设置默认的角色
     * 如果该角色不是默认，则设置为默认，且取消其他默认
     * @param id
     * @return
     */
    @GetMapping("set-default/{id}")
    public R<?> setDefaultRole(@PathVariable Long id) {
        roleService.changeDefaultRole(id);
        return R.ok();
    }

    /**
     * 设置一个用户的角色
     * @param userId
     * @param roleId
     * @return
     */
    @PutMapping("set-user-role/{userId}/{roleId}")
    public R<?> setUserRole(@PathVariable String userId, @PathVariable Long roleId) {
        boolean success = roleService.setUserRole(userId, roleId);
        return success ? R.ok() : R.failed(RCode.REMOVED);
    }
}
